// 如果是非路径形式的模块标识
// 路径形式的模块
// ./
// ../
// /xxx 几乎不用
// d:/a/  几乎不用
// 首位的 / 在这里标识当前文件模块所属磁盘根路径
// .js 后缀名可以省略
// require('./foo.js')

// 核心模块的本质也是文件
// 核心模块文件已经被到二进制中
// require('fs')
// require('http')

// 第三方模块
// 凡事第三方模块都必须通过npm下载
// 通过require('包名')的方式来进行加载使用
// 不可能有一个第三方包和核心模块的名字一样的
// 即不是核心模块、也不是路径形式的模块
// 先找导当前文件所处目录的node_modules目录
// node_modules/art-template
// 找 node_modules/art-template/package.json
// 再去找json里面的main属性
// main属性记录了 art-template 的入口模块

//  如果package.json 不存在会报错，
//  如果没有main这个属性, index.js会被作为默认选项

// 如果上面任何一个条件都不成立，就会进入上一级目录中的 node_modules目录去查找
// 如果上一级还没有，就会上上一级， 直到磁盘根目录

// var template = require('art-template')

// 注意： 一个项目有且只有一个 node_modules, 放在项目根目录中，这样项目所有子目录都能加载到第三方包
// 不会出现有多个node_modules

// 模块査找机制


// 优先从缓存加载
// 核心模块
// 路径形式的文件模块
// 第三方模块
    // node_modules/art-template
    // node_modules/art-template/package.json
    // node_modules/art-template/package.json main 属性
    // index.js 备用项
    // 进入上一级 找node_modules
    // 依次往上走，直到根目录报错
    // 一个项目有且仅有一个node_modules放在根目录


// var b = require('aa')